import Vue from 'vue'
import Router from 'vue-router'


// 解决vue-router重复点击菜单报错的问题，重写 push 方法
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
// 重写 replace 方法
const originalReplace = Router.prototype.replace
Router.prototype.replace = function replace(location, onResolve, onReject) {
  if (onResolve || onReject) return originalReplace.call(this, location, onResolve, onReject)
  return originalReplace.call(this, location).catch(err => err)
}

Vue.use(Router)

// 静态路由表，不需要动态判断权限的路由，如登录页、404、等通用页面
export const constRoutes = [
  {
    path: '/search',
    name: 'Search',
    component: () => import('@/views/Search'),
    meta: {
      title: '测试',
      is_frame: 0,
      icon: '',
      hidden: 0
    }
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/Login'),
    meta: {
      title: '登录',
      is_frame: 0,
      icon: '',
      hidden: 0
    }
  },
  {
    path: '/401',
    name: '401',
    component: () => import('@/views/error-page/401'),
    meta: {
      title: '401',
      is_frame: 0,
      icon: '',
      hidden: 0
    }
  },
  {
    path: '/404',
    name: '404',
    component: () => import('@/views/error-page/404'),
    meta: {
      title: '404',
      is_frame: 0,
      icon: '',
      hidden: 0
    }
  },
  // 下面开始是动态路由
  // {
  //   path: '/',
  //   component: componentMap['Layout'],
  //   redirect: '/index',
  //   meta: {
  //     title: '首页',
  //     is_frame: 0,
  //     icon: 'el-icon-s-home',
  //     hidden: 1
  //   },
  //   children: [
  //     {
  //       path: 'index',
  //       name:'Index',
  //       component: componentMap['Index'],
  //       meta: {
  //         title: '首页',
  //         is_frame: 0,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     }
  //   ]
  // },
  // {
  //   path: '/system',
  //   component: componentMap['Layout'],
  //   redirect: '/system/user',
  //   name: 'System',
  //   meta: {
  //     title: 'System',
  //     icon: 'el-icon-s-home'
  //   },
  //   children: [
  //     {
  //       path: 'user',
  //       name: 'SystemUser',
  //       component: componentMap['User'],
  //       meta: {
  //         title: '用户管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'role',
  //       name: 'SystemRole',
  //       component: componentMap['Role'],
  //       meta: {
  //         title: '角色管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'menu',
  //       name: 'SystemMenu',
  //       component: componentMap['Menu'],
  //       meta: {
  //         title: '菜单管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'api',
  //       name: 'SystemApi',
  //       component: componentMap['Api'],
  //       meta: {
  //         title: '接口管理管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'perm/:id',
  //       name: 'SystemPerm',
  //       component: componentMap['Perm'],
  //       meta: {
  //         title: '授权管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 0
  //       }
  //     },
  //   ]
  // },
  // {
  //   path: '/info',
  //   component: componentMap['Layout'],
  //   redirect: '/info/password',
  //   children: [
  //     {
  //       path: 'password',
  //       name:'Password',
  //       component: componentMap['Password'],
  //       meta: {
  //         title: '密码管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'collect',
  //       name:'Collect',
  //       component: componentMap['Collect'],
  //       meta: {
  //         title: '收藏管理',
  //         is_frame: false,
  //         icon: 'el-icon-s-home',
  //         hidden: 1
  //       }
  //     },
  //     {
  //       path: 'test',
  //       redirect: '/info/test/test1',
  //       component: componentMap['TestIndex'],
  //       name:'Test',
  //       children: [
  //         {
  //           path: 'test1',
  //           name:'Test1',
  //           component: componentMap['Test1'],
  //           meta: {
  //             title: '侧一管理',
  //             is_frame: false,
  //             icon: 'el-icon-s-home',
  //             hidden: 1
  //           }
  //         },
  //         {
  //           path: 'test2',
  //           name:'Test2',
  //           component: componentMap['Test2'],
  //           meta: {
  //             title: '侧二管理',
  //             is_frame: false,
  //             icon: 'el-icon-s-home',
  //             hidden: 1
  //           }
  //         }
  //       ]
  //     },
  //   ]
  // }
]

// 创建路由管理器对象，并添加静态路由表
const createRouter = () => new Router({
  routes: constRoutes
})
const router = createRouter()


// 导出重置路由对象方法（该方法，主要是在更改路由列表前使用）
// 因为旧的路由对象已经通过 addRoutes 在前置守卫中添加了路由列表
// 所以在权限编辑中修改了页面权限后，需要重新添加路由列表
// 这时，就需要用到该方法；用户登出时，也应该使用该方法
export function resetRouter () {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // 替换旧的 router 的 matcher
}

export default router